package br.com.usjt.sge.usuario;

import java.io.IOException;
import java.util.List;

import org.apache.log4j.Logger;

import br.com.usjt.sge.util.DAOFactory;
import br.com.usjt.sge.util.EmailUtil;
import br.com.usjt.sge.util.MensagemUtil;
import br.com.usjt.sge.util.RNException;
import br.com.usjt.sge.util.UtilException;

/**
 * Classe com as regras de negocio de usuario.
 * 
 * @author cicero
 * 
 */
public class UsuarioRN {
	
	private static final Logger logger = Logger.getLogger(UsuarioRN.class.getName());
	private UsuarioDAO usuarioDAO;

	public UsuarioRN() {

		this.usuarioDAO = DAOFactory.criarUsuarioDAO();

	}

	public void enviarEmailPosCadastramento(Usuario usuario)
			throws RNException, IOException {

		MensagemUtil msg = new MensagemUtil();
		// configurando a mensagem
		String titulo = "Seu cadastro foi efetuado com sucesso!";

		String doctype = msg.getPropriedade("txt_doctype");
		String body = msg.getPropriedade("txt_body");
		String body1 = msg.getPropriedade("txt_body1");
		String body2 = msg.getPropriedade("txt_body2");
		String body3 = msg.getPropriedade("txt_body3");

		String mensagem = doctype + body + body1 + body2 +body3;

		try {

			EmailUtil emailUtil = new EmailUtil();
			emailUtil.enviarEmail(null, usuario.getEmail(), titulo, mensagem);
			logger.info("email enviado.");

		} catch (UtilException e) {

			throw new RNException(e);

		}

	}

	public boolean verificaEmail(Usuario usuario) {

		if (this.usuarioDAO.buscarPorEmail(usuario.getEmail()) != null) {

			return true;

		}

		return false;

	}

	public Usuario carregar(Integer codigo) {

		return this.usuarioDAO.carregar(codigo);

	}

	public Usuario buscarPorEmail(String email) {

		return this.usuarioDAO.buscarPorEmail(email);

	}

	public void salvar(Usuario usuario) {

		Integer codigo = usuario.getCodigo();

		if (codigo == null || codigo == 0) {

			usuario.getPermissao().add("ROLE_USUARIO");
			this.usuarioDAO.salvar(usuario);

		} else {

			this.usuarioDAO.atualizar(usuario);

		}

	}

	public void salvarEstacionamento(Usuario usuario) {

		Integer codigo = usuario.getCodigo();

		if (codigo == null || codigo == 0) {

			usuario.getPermissao().add("ROLE_ADMINISTRADOR");
			this.usuarioDAO.salvar(usuario);

		} else {

			this.usuarioDAO.atualizar(usuario);

		}

	}

	public void excluir(Usuario usuario) {

		this.usuarioDAO.excluir(usuario);

	}

	public List<Usuario> listar() {

		return this.usuarioDAO.listar();

	}
	
	public void atualizar(Usuario usuario) {
		
		this.usuarioDAO.atualizar(usuario);
		
	}

}
